#include<iostream>

using namespace std;

const int N=20;

char g[N][N];
bool col[N],dg[N],udg[N];
int n,ans;

void dfs(int step)
{
	if(step==n)
	{
		ans++;
		if(ans<=3)
		{
			for(int i=0;i<n;i++)
			{
				for(int j=0;j<n;j++)
				{
					if(g[i][j]=='*') cout<<j+1<<" ";
				}
			}
			cout<<endl;
		}
		return;
	}
	for(int i=0;i<n;i++)
	{
		if(!col[i] && !dg[step+i] && !udg[n-step+i])
		{
			g[step][i]='*';
			col[i]=1,dg[step+i]=1,udg[n-step+i]=1;
			dfs(step+1);
			col[i]=0,dg[step+i]=0,udg[n-step+i]=0;
			g[step][i]='.';
		}
	}
	
}

int main()
{
	
	cin>>n;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++) g[i][j]='.';
	}
	dfs(0);
	cout<<ans<<endl;
	return 0;
 } 
